package com.example.strategy.processor;


import com.example.strategy.enums.VipTypeEnum;
import com.example.strategy.service.VipProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;
import java.util.Objects;


/**
 * @author panghu
 * @version 1.0.0
 * @createTime 2023年07月26日 21:42:00
 * @Description
 */
@Slf4j
@Service
public class BaseVipProcessorImpl implements BaseVipProcessor {

    @Resource
    private VipProcessorHolder vipProcessorHolder;

    @Resource
    private VipCommonProcessor vipCommonProcessor;


    @Override
    public String execute(String type, Map<String, Object> paramMap) {

        VipProcessor vipProcessor = vipProcessorHolder.findVipProcessor(VipTypeEnum.getByType(type));

        if (Objects.isNull(vipProcessor)) {
            throw new RuntimeException("找不到处理器具体对应的实现类!!!");
        }

        log.info("输入的参数为： 【{}】", paramMap);

        // 1、校验用户是否是禁用用户
        log.info("校验用户是否是禁用用户....");
        vipCommonProcessor.isBlackListUser();

        // 2、校验用户是否在黑名单中
        log.info("校验用户是否在黑名单中....");
        vipCommonProcessor.isBlackListUser();

        // 3、判断用户是否为首次充值用户
        log.info("判断用户是否为首次充值用户....");
        vipCommonProcessor.isFirstRechargeUser();

        // 4、判断用户当前是不是会员
        log.info("判断用户当前是不是会员....");
        vipCommonProcessor.isNowMemberVipUser();

        try {
            // todo 开始处理逻辑
            log.info("查看用户是否都使用了优惠券....");
            vipProcessor.seeUserCouponInfo();

            log.info("查看用户的支付方式....");
            vipProcessor.seeUserPayWayInfo();

            log.info("创建用户的订单信息....");
            vipProcessor.createOrderInfo();

            log.info("查看用户充值了多长时间的会员....");
            vipProcessor.getUserOrderTime();

            log.info("给用户赠送优惠券....");
            vipProcessor.addToUserCoupon();

            // 根据不同身份获取不同折扣后的价格
            log.info("根据不同身份获取不同折扣后的价格....");
            Double price = vipProcessor.getMoney(998.0d);
            log.info("用户打折后的价格为：【{}】", price);

            // 根据不同身份获取不同的学习币
            log.info("根据不同身份获取不同的学习币....");
            Integer cron = vipProcessor.getCron();
            log.info("用户赠送的K币为：【{}】", cron);

            // 响应成功
            return vipProcessor.responseSuccessResult();
        } catch (Exception ex) {
            // 响应失败
            return vipProcessor.responseFailedResult();
        }
    }
}
